package com.oop07;

public class oop07 {
    public static void main(String[] args) {
        /*方法的重写

        * */

        //在这里我们发现方法的调用只和左边的定义有关
        A a = new A();
        a.test();//调用 A 类的方法
        //父类的引用指向了子类
        B b = new A();//b 是父类 B 的引用 ，这个引用指向了 A 类
        b.test();//调用 B 类的方法
        //输出结果
        // A=>test()
        //B=>test()
        //当我们去掉 A 和 B 类中方法的修饰符 static 是你会发现上面的代码并没有报错 ， 此时你会发现我们 idea 编译器编译界面左边会出现类似 O 的图标 ， 出现了图标就代表方法重载了
        //去掉 A 和 B 类中方法的修饰符 static 后再次运行上诉代码 ， 运行结果为 ：A=>test() A=>test() ，代表着子类重写了父类的方法

        //静态方法和非静态方法的区别很大 ， 方法的重写只与非静态方法有关


        /*总结
            重写需要有继承关系 ，子类重写父类的方法
            子类和父类中被重写的方法的方法名必须相同 , 子类的方法和父类的方法必须要一致 ，方法体不同
            参数列表必须相同
            修饰符 ：修饰符的范围可以扩大但不能缩小 。 修饰符的范围排序 public > protexted > default > private
            有时重写方法后会抛出异常 ： 范围 ，可以缩小 ， 但不能扩大 ：
         为什么需要重写？
            父类的功能子类不一定需要 ， 或者不一定满足
        * */
    }
}


